How to configure Kile to use a makefile? - makefile

How do I tell Kile to use a makefile for the QuickBuild action?
Some background:
I have a sweave-project that I usually compile via a makefile. However, it's quite annoying having to switch between text editor and console every time I want to check if a sweave/latex code generates the output I want.
Thus, I recently looked into Kile. I like it so far, but I can't get Kile to compile sweave-code (QuickBuild for pure tex-file works; but if I try to build a sweave file, Kile tells me that The document is not a latex root document. Continue anyway?).

The instructions given by Roland Smith probably work well for you. Let me answer your initial question, how to use a makefile. I've just used the following steps successfully:
Create a new build tool (Settings > Configure Kile > Tools > Build > New). Name it as you want, use "Custom" class in the following dialoge box. When created and selected, enter make as Command on the right (General Tab) and special targets passed to make in Options. In Advanced tab select type: Run outside of Kile (rest probably irrelevant ie. ok by default).
Check your build tool works: Run it manually (Build > Other > ). If you don't find it in the other group, search in the other groups (compile, etc.). (Sidenote: The group should be controlled by Menu Tab > Add Tool to build menu option (cf. settings in 1), but that didn't work for my Kile version.) This should print (Makefile is my name for the build tool created in 1):
[Makefile] d.tex (make)
[Makefile] Done!
Create shortcut for your tool (optional): Settings > Configure Shortcuts, search for the name you provided and assign a shortcut.
Add your build tool to some existing (already shortcutted) toolchain (eg. QuickBuild with Alt + 1) (optional): Go to the menu of step 1 ((Settings > Configure Kile > Tools > Build), select QuickBuild and replace PDFLatex on the right by your newly created custom tool.

Related

IntelliJ & Maven - mvn command not found

I'm trying to build a drop wizard project created with IntelliJ.
when I run
mvn package
I get
bash: mvn: command not found
I'm on a Mac and I'm following this tutorial: http://www.dropwizard.io/0.9.2/docs/getting-started.html
According to IntelliJ documentation (https://www.jetbrains.com/help/idea/2016.1/maven.html?origin=old_help)
Maven integration is shipped with IntelliJ IDEA, and you do not need to perform any additional actions to install it. You can start using it straight away for importing Maven projects, working with them and for running Maven goals.
So I don't know what I'm suppose to do in order to use the command line
Any idea?
Thanks
In IntelliJ, on the right hand side, click "Maven", and expand "Lifecycle"
Select "Package" and click "Run" (green arrow).
mvn is the command line tool for Maven.
See https://maven.apache.org/install.html for details on how to install it.
Or as you are using a Mac if you use brew try using it to install the maven formula.
If you have maven properly installed and you want to configure intelliJ terminal with a custom Terminal or if you want fix "command not found",
follow these steps:
Click > File
Click > Settings
Click > Tools
Click > Terminal
Edit "Shell path" # "Application Settings", if you use git bash change current path with:
C:\Users\Work\AppData\Local\Programs\Git\bin\sh.exe --login
// The path you may have differs based on your OS, in example: "installationPath\Terminal Folder\bin\sh.exe --login"
Click > Apply
Click > Ok
I used git bash but technically it should work with every terminal. Do not forget to add --login after the *.exe
If it still doesn't work maybe you need to check:
Click > Environment variables
Click > System Properties
Click > Environment Variables
Click > System Variables
Select > Path from the list
Click > Edit
Click > New
Insert the path of your maven bin folder, in example:
"installationPath\apache-maven-3.8.6\bin"
Also insert the path of your jdk, in example:
"installationPath\Java\jdk-18.0.1.1"

cant' install sublimemaven plugin successfully

I follow this https://coderwall.com/p/etesrq to install the sublimemaven plugin for my sublime2.
All steps seems ok, but I can't get the 'Maven' menu item in 'Tools->Build System'.
I have added the
"m2_home": "F:/jill/job/software/apache-maven-3.0.4",
add
"maven_menu_commands":
by following https://github.com/nlloyd/SublimeMaven.
and restart sublime2 several times.
but still can't get it.
Could some body help?
Thanks
I find that I don't have "maven" in "tools" -> "build system" either, but using cmd + shift + p , then type in "maven", I can see several commands, one of them is "maven: Run...", I use this command when I need to specify one. Commonly, other default maven commands could satisfy your requirement.
Nick Lloyd's SublimeMaven plug-in installed nicely for me on Sublime Text 3 but showed build commands only in the Command Palette (CTRL+SHIFT+P).
Only after I added Andres Koetter's configuration file to the Packages/User directory of my portable SUBLIME_TEXT_3/Data/ dir (or ~/.config/sublime-text-3/ for some) I found a Maven build option in the Tools > Build menu. This new option enables Sublime Text 3's build system run commands for Maven builds, that is:
Build (CTRL+B) : run default build configuration
Build with ... (CTRL+SHIFT+B) : select mvn goals, profiles, command-line options, etc.
Just adding a working directory tip that I found on this URL: https://gist.github.com/4ndrej/5162986
Once I finished instructions provided by user2951392, I got working Maven menu on sublime text 3. Then I tried to build some projects, but for each one of them I got an error like this: "...there is no pom.xml file on directory E:\sublime...".
So, just change the following content on Maven.sublime-build file:
old: "$file_path"
new: "${project_path:${folder}}"
With this final change I got my sublime text 3 and Maven 3+ working fine.
Cheers!

How can I conditionally include a file based on build configuration in Xcode?

I have an Xcode project with a large number of targets where I would like to include a settings bundle for apps built under the Ad-hoc and Debug configurations, but not under the Release configuration.
Build Phases don't seem to allow for making themselves conditional on configuration (they can obviously be conditional on target, but doubling the number of targets in the project would make it completely unusable).
That leaves writing a custom Build Rule. My plan is to exclude the Settings.bundle from all targets, and create a build rule that conditionally copies it into the product package, but applicable examples are really hard to find.
The build rule I've started has the Process setting set to "Source files with names matching:" and Settings.bundle as the name. The Using setting is "Custom script:".
My custom script is as follows (with the caveat that my bash scripting is on a cargo cult level):
if [${CONFIGURATION} = 'Debug'] then
cp -r ${INPUT_FILE_PATH} ${DERIVED_FILES_DIR}/.
fi
Finally, I have ${DERIVED_FILES_DIR}/Settings.bundle listed as an output file.
Since I'm here, it should be obvious that it's not working. My first question is whether there is somewhere I can view the output of the build rules as the execute to make sure that 1) it's actually being executed and that 2) I don't have a stupid syntax error somewhere.
Also, what's the proper location (in the form of an environment variable) to copy the output to?
I finally figured it out.
For each target for which you want to conditionally include the settings bundle, choose its Project from the source list, choose the target, and switch to the "Build Phases" tab.
Click the "Add Build Phase" button and choose "Add Run Script".
Then enter the following for the script:
if [ "${CONFIGURATION}" == "Debug" ]; then
cp -r "${PROJECT_DIR}/Settings.bundle" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app"
fi
I know this question has been answered already, and the answer was very helpful to me, but I wanted to throw my own modified solution out there as well.
My requirement was to have different settings bundles for different build configurations, rather than just not including it at release. Assuming a simplistic approach of only Debug and Release configurations, here's how to do it:
Start by adding 2 settings bundles to the project, named Settings-debug.bundle and Settings-release.bundle and then remove these files from the Copy Bundle Resources build phase. Next add a user defined build setting called SETTINGS_BUNDLE, which has different values for each configuration:
Debug ${PROJECT_DIR}/relative/path/to/Settings-debug.bundle
Release ${PROJECT_DIR}/relative/path/to/Settings-release.bundle
Next add a run-script build phase (after Copy Bundle Resources) named Copy Settings Bundle with a modified version of the script in Frank's solution.
cp -r "${SETTINGS_BUNDLE}/" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Settings.bundle"
The difference here is that the copied bundle is always named Settings.bundle regardless of the source name.
You then need to add another build phase script to prevent code signing errors when the only changes are in the settings bundles. It forces the code signing step to occur on every build. This should run before the Compile Source Files build phase. I called mine Force Codesign.
touch "${PROJECT_DIR}/relative/path/to/main.m"
For complied sources, there is a poorly documented user defined build setting that can be added. Files can be both excluded and included from compilation
Go to your target's Build Settings > Tap the + button > Add User-Defined Setting
The key is either INCLUDED_SOURCE_FILE_NAMES or EXCLUDED_SOURCE_FILE_NAMES
The value is a space separated list of file paths
See reference:
http://lists.apple.com/archives/xcode-users/2009/Jun/msg00153.html
(Tested with Xcode 9.3)
I can't find when Xcode included this feature but EXCLUDED_SOURCE_FILE_NAMES is now directly available in Build Settings > Build Options > Excluded Source File Names.
So you no longer need to create a User-Defined Setting.
See below:
It will automatically add this line in your .pbxproj.
Settings.bundle is always copied into destination area no matter whether Release or Debug configuration. So, maybe you need the following code:
if [ ${CONFIGURATION} == "Release" ]; then
rm -rf ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Settings.bundle
fi
I am no shell script expert but I think you need space between the square brackets and the condition. Also, quoting the variables may help:
if [ "${CONFIGURATION}" = "Debug" ] then
cp -r "${INPUT_FILE_PATH}" "${DERIVED_FILES_DIR}"/.
fi
As for the location, I use "$BUILT_PRODUCTS_DIR"/"$FULL_PRODUCT_NAME" for the root of my OS X app bundle.

How do I use Mogenerator?

I installed Mogenerator. Now what do I do? How do I use it?
The first problem I have is that I have no idea where it was installed to. During the install process, it only let me select the hard drive to install it on, not the directory. The most natural location would be the Applications folder, but it isn't there.
Next, the readme (which I found online) states:
Xmo'd works by noticing when your
*.xcdatamodel is saved. If the model file's Xcode project item comment
contains xmod, an AppleScript is fired
that creates a folder based on your
model's file name and populates it
with derived source code files from
your model. It then adds the new
folder to your project as a Group
Reference and adds all the source
files to your project.
There are several issues with the above statement that aren't clear:
What does "the model file's Xcode project item comment" refer to? How can I make it contain "xmod"?
Is adding this comment and having mogenerator monitor the .xcdatamodel file the only way to use mogenerator? Is there any way I can manually run mogenerator so that it recreates the generated files?
One more caveat to be aware of: You have to already set the Class properties of your entities to something different than NSManagedObject. Otherwise Xmo'd won't do anything.
Note: Xmo'd currently doesn't work with Xcode 4/5, afaik.
What I do is just add a "MOGenerator" target in Xcode:
Go to your project and click on "Add Target..." in the "Targets" section.
Choose "iOS -> Other -> Aggregate"
Go to "Build Phases"
Select from the Menu "Editor -> Add Build Phase -> Add Run Script Build Phase"
Paste your MOGenerator command into the Run Script section, for example:
PATH=${PATH}:/usr/local/bin
cd "${PROJECT_DIR}/MyApp"
mogenerator --human-dir Classes --machine-dir MOGenerated --model MyApp.xcdatamodeld/MyApp.xcdatamodel --template-var arc=true
Now you can update your MOGenerator-generated by simply running this target.
mogenerator is a script that is installed into your developer directory as I recall. However it might be installed into the Xcode scripts directory under your ~/Library.
What do you mean by manually triggering the application? You can trigger a build by "touching" the data model. Any save on the data model will trigger the build
In Xcode if you select the model file and hit ⌘I you will get its metadata. Click on the comments tab and add xmod there. mogenerator looks for that comment to know if it should generate files.
Update
You can run mogenerator from the command line as well as have it monitor your files. Type mogenerator --help in the Terminal to see the options.
I searched my hard drive and found the following files:
The application is installed to: /usr/bin/mogenerator.
The /Library/Application Support/mogenerator/ directory contains some .motemplate files.
⌘I doesn't work in Xcode 4 any more. please check out the command line tool. Here is the doc
Studying line 22 of make_installer.command, I found that /Developer/Library/Xcode/Plug-ins/Xmod.pbplugin is also installed.
And then, searching mogenerator GitHub Issues for "uninstall," I found official instructions on how to uninstall mogenerator from the creator himself.
using mogenerator:
download mogenerator
run and build the mogenerator project
locate the built file in the product group
copy the built file in to /usr/bin directory
in the terminal copy this code and hit enter:
mogenerator -m /Users/hashem/Desktop/Projects/myApp/myAppModel.xcdatamodel -O /Users/hashem/Desktop/Projects/myApp/managedObjects --template-var arc=true
NOTE: here first I have entered myApp.xcdatamodel file path, and next path is the location of generated files. if the file path contains space character be sure to add \ character before space in the file path. like /desktop/xcode\ projects/myApp/....
enjoy!

Xcode Post Build Copy File Actions

In Xcode, how can I call a 'shell script' which is a Perl script that copies the .app and .dsym files to a different directory?
I want to pass the name of the project and/or the project's root directory to the script. I want to have the script called every time I build in release and distribution modes but not in debug mode.
For anyone else who is wondering, you can also do a simple copy via
[Click on Scheme Name] -> Edit Scheme... -> [Select Scheme] -> Run "Target" -> Post-actions
and add a cp command. In my case, for quick testing and ease of use, I wanted to copy my binary back to the project directory so that I could process some data files. I used the following:
cp ${TARGET_BUILD_DIR}/${TARGET_NAME} ${PROJECT_DIR}/"binaryFileName"
Right-click on your target and choose Add->New Build Phase->New Run Script Build Phase.
Inside the "Script" text area, add:
if [ ${CONFIGURATION} != "Debug" ]
then
/usr/bin/perl "${PROJECT_DIR}/myperlscript.pl" "${PRODUCT_NAME}" "${PROJECT_DIR}"
fi
Change the location and name of myperlscript.pl to be the location and name of your script.
Make sure to move the Run Script step to be after Link Binary With Libraries, since you're copying the built .app.
(Might also want to add the "perl" tag to the question)
Instead of a script, Xcode 12.4 has an build phase for copying files:
Show the project navigator (blue folder button)
Click on your project (blueprint icon)
Click "Build Phases" header in the opened settings pane
Click the + in the top left of the settings pane
Click "New Copy Files Phase"
Change Destination to Absolute Path and set your path
Click the + at the bottom to add a file to be copied
Save. If you run without saving, your new phase is ignored.
If you don't want an absolute path or one of the destinations provided, you'll have to use a Run Script Phase instead.

Resources